package ft.esc.impl.trav;

import java.io.File;
import java.util.List;

public class DirFileTravWithCb extends DirFileTravBase
{
	public void startRun()
	{
		List<String> faLst = getFaLst();
		
		if(faLst==null || faLst.size()==0)
		{
			System.out.println("travRun : 参数为空，无法执行循环。");
			return;
		}
		
		// 只要 faLst 有内容，就一直循环调用（遍历目录）
		while(faLst!=null && faLst.size()>0)
		{
			travRun();
		}
	}
	
	/**
	 * 循环体
	 */
	private void travRun()
	{
		List<String> faLst = getFaLst();
		// 从 fa 取出最后一条
		String fp = faLst.get(faLst.size()-1);
		faLst.remove(faLst.size()-1);
		
		if(isFile(fp))
		{
			// 回调
			execStringCallBack(fp);
		}
		else if(isDir(fp))
		{
			// 首先遍历该目录下的所有文件，加入 faLst 列表
			File sFp = new File(fp);
			if(sFp!=null)
			{
				String[] subNames = getInvertSortArray( sFp.list() );
				
				if(subNames!=null && subNames.length>0)
				{
					for(int i=0; i<subNames.length; i++)
					{
						String sFn = subNames[i];
						if(sFn!=null && sFn.length()>0)
						{
							// 按照目录与文件一起
							File nSfp = new File(sFp, sFn);
							if(nSfp!=null)
							{
								String nSfn = "";
								try
								{
									nSfn = nSfp.getCanonicalPath();
								}
								catch(Exception e)
								{
									e.printStackTrace();
								}
								
								// 放入 faLst 中，供后续使用
								if(nSfn!=null && nSfn.length()>0)
								{
									faLst.add(nSfn);
//									System.out.print("DEBUG : 遍历待加入列表的文件名 : ");
//									System.out.println(nSfn);
								}
							}
						}
						else
						{
							System.out.print("遍历目录[");
							System.out.print(fp);
							System.out.print("]第[");
							System.out.print(i);
							System.out.println("]行结果为空或者长度为零。");
						}
					}
				}
			}
		}
		else
		{
			System.out.print("psi.testsuite.TestMainRunner -> travRun 传入参数既不是文件，也不是目录：");
			System.out.println(fp);
		}
	}
}
